LINQ (Language Integrated Query) ব্যবহার করার সময়, একাধিক কুয়েরি একে অপরের উপর নির্ভরশীল হতে পারে এবং একে বার বার রান করালে তা সিস্টেমের পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে। এর ফলে, caching টেকনিকস ব্যবহার করা গুরুত্বপূর্ণ হয়ে ওঠে, যা একটি কুয়েরি বা তার ফলাফল একটি নির্দিষ্ট সময় পর্যন্ত মেমোরিতে সংরক্ষণ করে, যাতে একই কুয়েরি বার বার চালানোর প্রয়োজন না হয়।
LINQ এ ক্যাশিং কার্যকরী হতে পারে যখন:
LINQ কুয়েরির ফলাফল ক্যাশিং করার একটি সাধারণ পদ্ধতি হলো ToList() বা ToArray() মেথড ব্যবহার করে। এটি কুয়েরির ফলাফলকে একটি List বা Array আকারে সংগ্রহ করে, যাতে পরবর্তী সময়ে আবার সেই কুয়েরি রান করতে না হয়।
ToList()
ব্যবহার করেusing System;
using System.Collections.Generic;
using System.Linq;
class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public double Salary { get; set; }
}
class Program
{
static void Main()
{
List<Employee> employees = new List<Employee>
{
new Employee { ID = 1, Name = "Alice", Age = 30, Salary = 50000 },
new Employee { ID = 2, Name = "Bob", Age = 35, Salary = 60000 },
new Employee { ID = 3, Name = "Charlie", Age = 40, Salary = 70000 },
new Employee { ID = 4, Name = "David", Age = 25, Salary = 45000 }
};
// কুয়েরি এবং ক্যাশিং
var cachedEmployees = employees.Where(e => e.Age > 30).ToList();
// ক্যাশ করা ডেটার উপর আবার কুয়েরি চালানো হচ্ছে
var olderEmployees = cachedEmployees.Where(e => e.Age > 35).ToList();
// ফলাফল প্রদর্শন
foreach (var employee in olderEmployees)
{
Console.WriteLine($"{employee.Name} is older than 35.");
}
}
}
আউটপুট:
Bob is older than 35.
Charlie is older than 35.
এখানে, প্রথম কুয়েরির ফলাফল ToList()
ব্যবহার করে ক্যাশ করা হয়েছে। পরবর্তীতে cachedEmployees
ব্যবহার করে একই কুয়েরি বার বার রান না করে দ্রুত ফলাফল পাওয়া গেছে।
MemoryCache ক্লাসটি একটি বিল্ট-ইন ক্যাশিং ক্লাস যা সিস্টেমের মেমোরিতে ডেটা সংরক্ষণ করতে সাহায্য করে। এটি কুয়েরি ক্যাশিংয়ের জন্য একটি আরও শক্তিশালী পদ্ধতি।
MemoryCache
ব্যবহার করেusing System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;
class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public double Salary { get; set; }
}
class Program
{
static void Main()
{
List<Employee> employees = new List<Employee>
{
new Employee { ID = 1, Name = "Alice", Age = 30, Salary = 50000 },
new Employee { ID = 2, Name = "Bob", Age = 35, Salary = 60000 },
new Employee { ID = 3, Name = "Charlie", Age = 40, Salary = 70000 },
new Employee { ID = 4, Name = "David", Age = 25, Salary = 45000 }
};
// MemoryCache তৈরি
ObjectCache cache = MemoryCache.Default;
// ক্যাশে ডেটা রাখা
string cacheKey = "EmployeesAbove30";
var cachedEmployees = cache[cacheKey] as List<Employee>;
if (cachedEmployees == null)
{
// কুয়েরি এবং ক্যাশিং
cachedEmployees = employees.Where(e => e.Age > 30).ToList();
// ক্যাশে ডেটা সংরক্ষণ
cache.Set(cacheKey, cachedEmployees, DateTimeOffset.Now.AddMinutes(10));
}
// ক্যাশে থেকে ডেটা ব্যবহার করা
foreach (var employee in cachedEmployees)
{
Console.WriteLine($"{employee.Name} is older than 30.");
}
}
}
ব্যাখ্যা:
আউটপুট:
Bob is older than 30.
Charlie is older than 30.
যদি একাধিক থ্রেড থেকে ডেটা ক্যাশিং করতে চান, তাহলে ConcurrentDictionary ব্যবহার করতে পারেন, কারণ এটি থ্রেড সেফ। এটি খুবই উপকারী যখন আপনার অ্যাপ্লিকেশন একাধিক থ্রেডে একাধিক কুয়েরি এক্সিকিউট করে।
LINQ তে ক্যাশিং টেকনিকস ব্যবহার করে আপনি ডেটার পুনরায় প্রক্রিয়া করা এবং নির্দিষ্ট কুয়েরির ফলাফল পুনরুদ্ধার করা থেকে সময় এবং প্রসেসিং শক্তি বাঁচাতে পারেন। ToList(), MemoryCache, এবং ConcurrentDictionary এর মতো টুলস ব্যবহার করে কার্যকরভাবে ক্যাশিং করা সম্ভব, যা সিস্টেমের পারফরম্যান্স এবং কার্যকারিতা উন্নত করতে সাহায্য করে।
common.read_more